home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Win 50 Game+ Vol. 7 (Japan)
/
Win 50 Game+ Vol. 7 (Japan).7z
/
Win 50 Game+ Vol. 7 (Japan).bin
/
lha_file
/
dpgolf11.lzh
/
DPG11SRC.LZH
/
ABOUT.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1996-08-21
|
5KB
|
171 lines
unit About;
interface
uses WinTypes, WinProcs, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons, Spin, ExtCtrls;
type
TAboutBox = class(TForm)
Panel1: TPanel;
Comment: TLabel;
ProductName: TLabel;
Version: TLabel;
Okbutton: TButton;
Cancelbtn: TButton;
Combo1: TComboBox;
Makebtn: TButton;
Spin1: TSpinEdit;
Spin2: TSpinEdit;
Spin3: TSpinEdit;
Spin4: TSpinEdit;
Spin5: TSpinEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
procedure MakebtnClick(Sender: TObject);
procedure Combo1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private ÉΘî╛ }
procedure setspin(a,b,c,d,e : integer);
public
{ Public ÉΘî╛ }
end;
var
AboutBox: TAboutBox;
implementation
{$R *.DFM}
var map : array[0..15,0..15] of byte;
hgt, dx, dy : array[-1..16,-1..16] of real;
data : file of byte;
procedure TAboutBox.MakebtnClick(Sender: TObject);
var i, j, k, l, m, n, x, y, xx, yy, w, wx, wy, f : integer;
r : real;
bt : byte;
begin
randomize;
screen.cursor := crHourGlass;
assignfile(data,'dpgolf.dat');
rewrite(data);
comment.caption := 'Now making course...';
comment.update;
for l := 1 to 18 do begin
if spin5.value = 0
then r := (5 + random(25))/40
else r := (4 + spin5.value + random(15+ spin5.value))/40;
for i := 0 to 15 do for j := 0 to 15 do map[j,i] := 0;
for i := 6 to 8 do for j := 6 to 8 do map[j,i] := 1;
f := 9;
repeat
repeat
x := random(13);
y := random(13);
k := 0;
for i := 0 to 3 do for j := 0 to 3 do inc(k,map[x+j,y+i]);
until (k >= 4) and (k <= 15);
f := f + 16 - k;
for i := 0 to 3 do for j := 0 to 3 do map[x+j,y+i] := 1;
until f >= round(16 * 16 * r);
for i := -1 to 16 do for j := -1 to 16 do begin
hgt[j,i] := 0.0;
dx[j,i] := 0.0;
dy[j,i] := 0.0;
end;
m := random(spin1.value - 2) + 2;
for k := 1 to spin3.value do begin
w := random(spin1.value - m + 1) + m;
wx := random(w-1) + 1;
wy := w - wx;
if random > 0.5 then f := 1 else f := -1;
repeat
x := random(16);
y := random(16);
until map[x,y] = 1;
n := 20 - random(spin2.value);
for i := -1 to 16 do for j := -1 to 16 do begin
xx := abs(x - j);
yy := abs(y - i);
if (xx <= wx) and (yy <= wy) then hgt[j,i] := hgt[j,i] +
((1 - xx / wx) * (1 - yy / wy)) * n * f;
end;
end;
for i := 0 to 15 do for j := 0 to 15 do begin
dx[j,i] := hgt[j+1,i] + hgt[j+1,i-1] + hgt[j+1,i+1]
- hgt[j-1,i] - hgt[j-1,i-1] - hgt[j-1,i+1];
dy[j,i] := hgt[j,i+1] + hgt[j-1,i+1] + hgt[j+1,i+1]
- hgt[j,i-1] - hgt[j-1,i-1] - hgt[j+1,i-1];
end;
r := 0.0;
for i := 0 to 15 do for j := 0 to 15 do begin
if abs(dx[j,i]) > r then r := abs(dx[j,i]);
if abs(dy[j,i]) > r then r := abs(dy[j,i]);
end;
r := spin4.value / r;
for i := 0 to 15 do for j := 0 to 15 do begin
dx[j,i] := dx[j,i] * r;
dy[j,i] := dy[j,i] * r;
if (trunc(dx[j,i]) = 0) and (trunc(dy[j,i]) = 0) then
if abs(dx[j,i]) >= abs(dy[j,i]) then begin
dy[j,i] := dy[j,i] / (abs(dx[j,i]) + 0.01) * 1.9;
dx[j,i] := 1.1;
end else begin
dx[j,i] := dx[j,i] / (abs(dy[j,i]) + 0.01) * 1.9;
dy[j,i] := 1.1;
end;
end;
for m := 0 to 15 do for n := 0 to 15 do begin
if map[n,m] = 0 then bt := $88
else bt := (trunc(dy[n,m] + 8)) * 16 + trunc(dx[n,m] + 8);
write(data,bt);
end;
repeat
repeat m := random(256) until map[m mod 16,m div 16] = 1;
repeat n := random(256) until map[n mod 16,n div 16] = 1;
until ((m mod 16) - (n mod 16))*((m mod 16) - (n mod 16)) +
((m div 16) - (n div 16))*((m div 16) - (n div 16))
>= 20 + random(spin5.value)*2;
n := 255 - n;
write(data,byte(m),byte(n));
end;
closefile(data);
screen.cursor := crDefault;
end;
procedure TAboutBox.setspin(a,b,c,d,e : integer);
begin
spin1.value := a;
spin2.value := b;
spin3.value := c;
spin4.value := d;
spin5.value := e;
end;
procedure TAboutBox.Combo1Change(Sender: TObject);
begin
case combo1.itemindex of
0 : setspin(10, 5,20,4,4);
1 : setspin(10,10, 5,3,3);
2 : setspin(15, 2,30,5,5);
3 : setspin(10,15, 3,2,1);
4 : setspin(15, 1,30,7,6);
5 : setspin(20, 5, 1,5,4);
6 : setspin(random(16)+5,random(10)+1,random(36)+5,random(6)+2,0);
end;
end;
procedure TAboutBox.FormCreate(Sender: TObject);
begin
combo1.itemindex := 0;
end;
end.